const foo1 = {
  a: 1,
  b: "1",
  c: NaN,
  d: [
    {
      a: 1,
      b: 2,
    },
  ],
  f: {
    a: 1,
  },
  g: null,
};

const foo2 = {
  a: 1,
  b: "1",
  c: NaN,
  d: [
    {
      a: 1,
      b: 2,
    },
  ],
  f: {
    a: 2,
  },
  g: null,
};


function forObj(objj1,objj2){
  for(key3 in objj1){
      if(Object.is(objj1[key3],objj2[key3])){
        // 傻逼了这里，在这放了一万年的return true ，应该放到后面的去的
      }else{ 
        return false
      }
  }
  return true
}

function forArr(objj1,objj2){
  console.log(...objj1,...objj2);
  if(forObj(...objj1,...objj2)){
    return true
  }else{
    return false
  }
}
function compare(obj1,obj2){
  if(Object.keys(obj1).length != Object.keys(obj2).length){
    return false
  }else{
    for(key in obj1){
      if(obj2.hasOwnProperty(key)){
          if(Object.prototype.toString.call(obj1[key]) ==="[object Object]"){
            if(!forObj(obj1[key],obj2[key])){
              return '对象不对'
            }
          }
          if(Object.prototype.toString.call(obj1[key]) === "[object Array]"){
            console.log(forArr(obj1[key],obj2[key]),11111);
            if( !forArr(obj1[key],obj2[key]) ){
              return false
            }
          }
          // 数组和对象还有函数会被typeof 认为object，只要是这样就得给他一个函数去处理他们的关系
          if( !typeof obj1[key] == "object" && !Object.is(obj1[key],obj2[key])){
              return '值错误';
          }
      }else{
        return '属性错误'
      }
    }
    return 'taidui'
  }
}
console.log(compare(foo1, foo2));